package  
{
	import fl.motion.Motion;
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.ui.Keyboard;
	/**
	 * ...
	 * @author Leandro Moreira Lopes
	 */
	public class Menu extends MovieClip
	{
		private var my_sound			:Sound = new musicatema();					/** * musica tema do menu inicial */
		private var my_sound2			:Sound = new musicaover();					/** * som do gameover*/
		private var tocar				:SoundChannel = new SoundChannel();			/** * canal de som da classe menu */
		
		private var TelaPrincipal		:MovieClip;									/** * plano de fundo do menu principal */
		
		private var aviso				:MovieClip;									/** * aviso de "click para continuar..."*/
		
		private var MenuNaves			:MovieClip;									/** * plano de fundo do menu de seleção de naves*/
		private var BotaoContinuar		:MovieClip;									/** * botao de continuar na tela de selção de naves*/
		private var BotaoNave1			:MovieClip;									/** * botao em que mostra as naves do jogador 1*/
		private var BotaoNave2			:MovieClip;									/** * botao em que mostra as naves do jogador 2*/
		
		private var MenuBackground		:MovieClip;									/** * plano de fundo do menu de seleção da fase*/
		private var BotaoBackground		:MovieClip;									/** * botao para mudar de level ( so altera o plano de fundo de cada fase e algumas variaveis de tempo*/
		private var BotaoIniciar		:MovieClip;									/** * botao para iniciar o jogo*/
		
		private var gameover			:MovieClip;									/** * variavel da msg de gameover*/
		private var BotaoReiniciar		:MovieClip;									/** * botao para reiniciar o jogo*/
		
		
		private var legenda				:MovieClip;		
		
		
		public function Menu() 
		{
			
		}
		
		
		public function menuInicial():void
		{
			tocar = my_sound.play();												/** * tocando tema de abertura*/
			
			legenda = new Legenda();												/** * adicionando letreiro*/
			legenda.x = 400;
			legenda.y = 600;
			Main.getInstance().MC_telaMenu.addChild(legenda);
			
			TelaPrincipal = new TelaDeMenu();										/** * adicionando tela de fundo do menu*/
			TelaPrincipal.x = 400;
			Main.getInstance().MC_telaMenu.addChild(TelaPrincipal);
			
			aviso = new Aviso();													/** * adicionando aviso "Click para continuar..." do menu*/
			aviso.x = 400;
			aviso.y = 60;
			Main.getInstance().MC_telaMenu.addChild(aviso);
			
			Main.getInstance().MC_telaMenu.addEventListener(MouseEvent.CLICK, escolherNaves, false, 0, true);		/** * adicionando evento para chamar funcao iniciar ao click na tela */
		}
		
		
		public function escolherNaves(e:MouseEvent):void
		{
			Main.getInstance().MC_telaMenu.removeEventListener(MouseEvent.CLICK, escolherNaves);			/** * removendo evento de click */
			Main.getInstance().MC_telaMenu.removeChild(legenda);
			Main.getInstance().MC_telaMenu.removeChild(aviso);												/** * removendo aviso do menu*/
			Main.getInstance().MC_telaMenu.removeChild(TelaPrincipal);
			
			MenuNaves = new TelaDeNaves();											/** * adicionando tela de menu para seleção das naves*/
			MenuNaves.x = 400;
			Main.getInstance().MC_telaMenu.addChild(MenuNaves);
			
			BotaoContinuar = new botao();											/** * adicionando botao para continuar apos selecao*/
			BotaoContinuar.gotoAndStop(1);
			BotaoContinuar.x = 400;
			BotaoContinuar.y = 500;
			Main.getInstance().MC_telaMenu.addChild(BotaoContinuar);
			
			BotaoNave1 = new botaonave1();											/** * adicionando MC que mostra as naves disponiveis para o jogador 1*/
			BotaoNave1.gotoAndStop(1);
			BotaoNave1.x = 200;
			BotaoNave1.y = 300;
			Main.getInstance().MC_telaMenu.addChild(BotaoNave1);
			
			BotaoNave2 = new botaonave2();											/** * adicionando MC que mostra as naves disponiveis para o jogador 2*/
			BotaoNave2.gotoAndStop(1);
			BotaoNave2.x = 600;
			BotaoNave2.y = 300;
			Main.getInstance().MC_telaMenu.addChild(BotaoNave2);
			
			BotaoNave1.addEventListener(MouseEvent.CLICK, mudarNave1, false, 0, true);							/** * adicionando eventos para mudanca das naves nos proprios botoes*/
			BotaoNave2.addEventListener(MouseEvent.CLICK, mudarNave2, false, 0, true);
			BotaoContinuar.addEventListener(MouseEvent.CLICK, escolherBackground, false, 0, true);				/** * adicionando evento para chamar proximo menu(selecao de levels)*/
		}
		
		
		public function escolherBackground(e:MouseEvent):void 
		{
			BotaoNave1.removeEventListener(MouseEvent.CLICK, mudarNave1);							/** * removendo funcoes e botoes anteriores*/
			BotaoNave2.removeEventListener(MouseEvent.CLICK, mudarNave2);
			BotaoContinuar.removeEventListener(MouseEvent.CLICK, escolherBackground);
			Main.getInstance().MC_telaMenu.removeChild(MenuNaves);
			Main.getInstance().MC_telaMenu.removeChild(BotaoContinuar);
			Main.getInstance().MC_telaMenu.removeChild(BotaoNave1);
			Main.getInstance().MC_telaMenu.removeChild(BotaoNave2);
			
			MenuBackground = new TelaDeBackground();												/** * adicionando tela de selecao de levels*/
			MenuBackground.x = 400;
			MenuBackground.gotoAndStop(1);
			Main.getInstance().MC_telaMenu.addChild(MenuBackground);
			
			BotaoBackground = new botaobackground();												/** * adicionando botao mudar de level (muda a foto e o frame do botao*/
			BotaoBackground.x = 200;
			BotaoBackground.y = 500;
			BotaoBackground.gotoAndStop(1);
			Main.getInstance().MC_telaMenu.addChild(BotaoBackground);
			
			BotaoIniciar = new botao();																/** * adicionando botao iniciar*/
			BotaoIniciar.gotoAndStop(2);
			BotaoIniciar.x = 600;
			BotaoIniciar.y = 500;
			Main.getInstance().MC_telaMenu.addChild(BotaoIniciar);
			
			
			
			
			BotaoBackground.addEventListener(MouseEvent.CLICK, mudarBackground, false, 0, true);	/** * adicionando evento para chamar funcao de iniciar o jogo*/
			BotaoIniciar.addEventListener(MouseEvent.CLICK, iniciar, false, 0, true);				/** * adicionando evento para chamar funcao de mudar o level*/
		}
		
		
		public function iniciar(e:MouseEvent):void
		{
			tocar.stop();															/** * parando a musica da abertura caso ainda nao tenha terminado o tempo total da mesma*/
			
			BotaoIniciar.removeEventListener(MouseEvent.CLICK, iniciar);			/** * removendo eventos */		
			BotaoBackground.removeEventListener(MouseEvent.CLICK, mudarBackground);
			Main.getInstance().MC_telaMenu.removeChild(BotaoIniciar);				/** * removendo os botoes e plano de fundo dos menus*/
			Main.getInstance().MC_telaMenu.removeChild(MenuBackground);
			Main.getInstance().MC_telaMenu.removeChild(BotaoBackground);
			
			Main.getInstance().iniciarJogo();										/** * chamando função iniciarJogo da Main*/
		}
		
		
		public function mudarBackground(e:MouseEvent):void
		{
			switch (Main.getInstance()._levelState)									/** *função de mudança de level de acordo com a variavel _levelState ("string") da classe Main*/
			{
				case "Level1":
					Main.getInstance()._levelState = "Level2";						/** * switch para mudança sequencial do level para 1, 2, 3...*/
					BotaoBackground.gotoAndStop(2);
					MenuBackground.gotoAndStop(2);
					break;
					
				case "Level2":
					Main.getInstance()._levelState = "Level3";
					BotaoBackground.gotoAndStop(3);
					MenuBackground.gotoAndStop(3);
					break;
					
				case "Level3":
					Main.getInstance()._levelState = "Level1";
					BotaoBackground.gotoAndStop(1);
					MenuBackground.gotoAndStop(1);
					break;
			}
		}
		
		
		public function mudarNave1(e:MouseEvent):void
		{
			switch (Main.getInstance()._nave1)									/** *função de mudança da nave de acordo com a variavel _nave1 ("string") da classe Main*/
			{
				case "XWing":
					Main.getInstance()._nave1 = "YWing";						/** * switch para mudança sequencial das naves para XWing, YWing, Falcon...*/
					BotaoNave1.gotoAndStop(2);
					break;
					
				case "YWing":
					Main.getInstance()._nave1 = "Falcon";
					BotaoNave1.gotoAndStop(3);
					break;
					
				case "Falcon":
					Main.getInstance()._nave1 = "XWing";
					BotaoNave1.gotoAndStop(1);
					break;
			}
		}
		
		
		public function mudarNave2(e:MouseEvent):void
		{
			switch (Main.getInstance()._nave2)									/** *função de mudança da nave de acordo com a variavel _nave2 ("string") da classe Main*/
			{
				case "TieInterceptor":
					Main.getInstance()._nave2 = "Tie";							/** * switch para mudança sequencial das naves para TieInterceptor, Tie, TieAdv...*/
					BotaoNave2.gotoAndStop(2);
					break;
					
				case "Tie":
					Main.getInstance()._nave2 = "TieAdv";
					BotaoNave2.gotoAndStop(3);
					break;
					
				case "TieAdv":
					Main.getInstance()._nave2 = "TieInterceptor";
					BotaoNave2.gotoAndStop(1);
					break;
			}
		}
		
		
		public function gameOver():void
		{
			if (Main.getInstance().pontoJ1 == 5)
			{
				gameover = new GO1();																	/** * adicionando mensagem de GAMEOVER*/
				gameover.x = Main.getInstance().stage.stageWidth / 2;
				gameover.y = Main.getInstance().stage.stageHeight / 2;
				Main.getInstance().stage.addChild(gameover);
			}
			
			else if (Main.getInstance().pontoJ2 == 5)
			{
				gameover = new GO2();																	/** * adicionando mensagem de GAMEOVER*/
				gameover.x = Main.getInstance().stage.stageWidth / 2;
				gameover.y = Main.getInstance().stage.stageHeight / 2;
				Main.getInstance().stage.addChild(gameover);
			}
			
			BotaoReiniciar = new reiniciar();														/** * adicionando botao para reiniciar*/
			BotaoReiniciar.x = Main.getInstance().stage.stageWidth / 2;
			BotaoReiniciar.y = (Main.getInstance().stage.stageHeight / 2) + 200;
			Main.getInstance().stage.addChild(BotaoReiniciar);
			
			tocar = my_sound2.play();																/** * tocando musica de GAMEOVER*/
			
			BotaoReiniciar.addEventListener(MouseEvent.CLICK, reiniciarJogo, false, 0, true);		/** * adicionando evento de click no botao para reiniciar o jogo*/
		}
		
		
		public function reiniciarJogo(e:MouseEvent):void
		{
			tocar.stop();															/** * caso musica nao tenha acabado, para de tocar*/
			
			Main.getInstance().pontoJ1 = 0;											/** * zerando os pontos*/
			Main.getInstance().pontoJ2 = 0;
			
			BotaoReiniciar.removeEventListener(MouseEvent.CLICK, reiniciarJogo);	/** * removendo eventos, aviso e botao para reiniciar*/
			Main.getInstance().removeChild(BotaoReiniciar);
			BotaoReiniciar = null;
			Main.getInstance().stage.removeChild(gameover);
			menuInicial();															/** * chama funcão menuInicial do Main, reiniciando o jogo a partir do menu*/
		}
	}
}